package com.aterrizar.ws;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import aterrizar.Asiento;
import aterrizar.Clase;
import aterrizar.Pasaje;
import aterrizar.Pasajero;
import aterrizar.Reserva;
import aterrizar.Vuelo;
import aterrizar.exceptions.AsientoNoDisponibleException;
import aterrizar.exceptions.AsientoYaLiberadoException;
import aterrizar.exceptions.PasajeInvalidoException;
import aterrizar.exceptions.ReservaInvalidaException;
import aterrizar.persistencia.PersistenciaHardcodeFactory;


public class AterrizarWS {
	
	public String reservarVuelo(String nroVuelo, int nroAsiento, Pasajero pasajero) {
		Vuelo vuelo = PersistenciaHardcodeFactory.getInstancia().getVuelo(nroVuelo);
		Asiento asiento = PersistenciaHardcodeFactory.getInstancia().getAsiento(nroAsiento);
		
		
		try {
			Reserva reserva = new Reserva(vuelo, pasajero, asiento);
			reserva.setNumeroReserva("004");
			reserva.reservar();
			return reserva.getNumeroReserva();
		} catch (ReservaInvalidaException e) {			
			e.printStackTrace();
			return "";
		} catch (AsientoNoDisponibleException e) {			
			e.printStackTrace();
			return "";
		}		
	}
	
	public double comprarPasaje(String nroReserva) {		
		Reserva reserva = PersistenciaHardcodeFactory.getInstancia().getReserva(nroReserva);
		
		Pasaje pasaje = new Pasaje(reserva);
		try {
			pasaje.comprar();
			return pasaje.getCosto();
		} catch (AsientoNoDisponibleException e) {
			return -1;
		} catch (PasajeInvalidoException e) {
			return -1;
		}
		
	}
	
	// Devuelve el importe de la reserva
	public double cancelarReserva(String nroReserva) {
		
		Reserva reserva = PersistenciaHardcodeFactory.getInstancia().getReserva(nroReserva);
		try {
			return reserva.cancelar();
		} catch (AsientoYaLiberadoException e) {
			return -1;
		}		
	}
	
	@SuppressWarnings("deprecation")
	public List<VueloWs> getVuelos(String ciudadOrigen, String ciudadDestino, Date fechaPartida, Clase clase) {
		List<VueloWs> vuelosDisponibles = new ArrayList<VueloWs>(); 
		
		// TODO obtener los vuelos de la BD
		VueloWs unVuelo1 = new VueloWs("DL101");
		unVuelo1.setFechaLlegada(new Date("01/07/2009 10:10:00"));
		unVuelo1.setFechaPartida(new Date("01/07/2009 08:10:00"));
		unVuelo1.setPrecio(1230.50);
		
		List<Integer> asientos1 = new ArrayList<Integer>();
		asientos1.add(new Integer(1));
		asientos1.add(new Integer(2));
		asientos1.add(new Integer(3));
		asientos1.add(new Integer(4));
		
		unVuelo1.setAsientos(asientos1);
		vuelosDisponibles.add(unVuelo1);
		
		VueloWs unVuelo2 = new VueloWs("AG701");
		unVuelo2.setFechaLlegada(new Date("01/01/2009 12:10:00"));
		unVuelo2.setFechaPartida(new Date("01/01/2009 08:10:00"));
		unVuelo2.setPrecio(1230.50);
		
		List<Integer> asientos2 = new ArrayList<Integer>();
		asientos2.add(new Integer(1));
		asientos2.add(new Integer(2));
		asientos2.add(new Integer(3));
		asientos2.add(new Integer(4));
		
		unVuelo2.setAsientos(asientos2);		
		vuelosDisponibles.add(unVuelo2);
		
		return vuelosDisponibles;
	}
}
